import java.io.Serializable;
//import java.util.Collection;
//import java.util.GregorianCalendar;
//import java.util.GregorianCalendar;
//import java.util.HashMap;
import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Observable;

public class Auteur extends Observable implements Serializable{
	
	// ************************************************************************************************************
	// Constantes
	// ************************************************************************************************************

	private static final long serialVersionUID = 1L;
	
	// ************************************************************************************************************
	// Attributs
	// ************************************************************************************************************
	
	private String _nom;
	private String _prenom;
	
	// Attributs d'Association
		private HashMap<Integer, Ouvrage> _ecrit;
	
	// ************************************************************************************************************
	// Constructeur
	// ************************************************************************************************************

	/**
	 * Constructeur. 
	 * @param nom			nom de l'auteur
	 * @param prenom			prenom de l'auteur
	 */
	public Auteur(String nom, String prenom) {
		
		this.setNom(nom);
		this.setPrenom(prenom);
		this.setEcrit(new HashMap<Integer, Ouvrage>());
		
	} // Fin Constructeur
	
	// ************************************************************************************************************
	// Méthodes privées
	// ************************************************************************************************************
	
	// ------------------------------------------------------------------------------------------------------------
	// Affecteurs
	
	/**
	 * setter de l'attribut auteur
	 * @param auteur valeur à affecter à l'auteur de l'ouvrage
	 */
	public void setNom(String nom){
		_nom = nom;
	}
	
	/**
	 * setter de l'attribut dateEdition
	 * @param date valeur à affecter à la date d'édition de l'ouvrage
	 */
	public void setPrenom(String prenom){
		_prenom = prenom;
	}
	
	/**
	 * setter de l'attrribut ecrit (ensemble des ouvrages ecrit par l'auteur )
	 * @param ecrit hashmap d'ecrits
	 */
	public void setEcrit(HashMap<Integer, Ouvrage> ecrits) {
		_ecrit = ecrits;
		
	}
	
	public void notifierObservateurs() {
		this.setChanged();
		this.notifyObservers();	
	}
	
	

	// ------------------------------------------------------------------------------------------------------------
	// Traitements
	

	
	/**
	 * Lie un ouvrage a l'auteur. Insère un ouvrage dans l'ensemble des ouvrages de l'auteur, avec son isbn.
	 * @param isbn isbn de l'exemplaire à insérer
	 * @param exemplaire exemplaire à insérer
	 */
	private void setEcrits(String isbn, Ouvrage ouvrage) {
		_ecrit.put(Integer.valueOf(isbn), ouvrage);	
	} // Fin setEmprints
	
	
	
	
	
	
	// ************************************************************************************************************
	// Méthodes publiques
	// ************************************************************************************************************

	// ------------------------------------------------------------------------------------------------------------
	// Accesseurs
	
	/**
	 * Getter du nom.
	 * @return nom de l'auteur
	 */
	public String getNom() {
		return _nom;
	}

	/**
	 * Getter du prenom.
	 * @return prenom de l'auteur
	 */
	public String getPrenom() {
		return _prenom;
	}
	
	/**
	 * getter d'un ouvrage de l'auteur.
	 * @param isbn isbn de l'oubrage retourné
	 * @return l'ouvrage dont l'isbn a été passé en paramètre, s'il existe
	 */
	public Ouvrage getOuvEecrit(String isbn) {
		return (Ouvrage) _ecrit.get(Integer.getInteger(isbn));
	} // Fin unExemplaire

	/**
	 * getter de l'ensemble des ecrit de l'auteur.
	 * @return une collection d'exemplaires
	 */
	public Collection<Ouvrage> getOuvsEcrit() {
		return _ecrit.values();
	}

	/**
	 * getter du nombre d'ecrit de l'auteur.
	 * @return un entier représentant le nombre d'ecrit de l'auteur
	 */
	public int getNbEcrit() {
		return _ecrit.size();
	}
	

	
	
	// ------------------------------------------------------------------------------------------------------------
	// Traitements
	
	/**
	 * Ajout d'un ouvrage a l'auteur.
	 * @param 
	 * @return  
	 */
	public Ouvrage ajouterEcrit() {
		return null;
	} // Fin ajouterExemplaire


	
	



} // Fin Classe Auteur